package dao.impl;

import javax.ejb.Stateless;
import javax.persistence.NoResultException;
import javax.persistence.Query;

import common.dao.impl.GenericJpaDAOImpl;

import dao.RodamientoDAO;
import entities.Rodamiento;
import entities.RodamientoStock;
@Stateless
public class RodamientoDAOBean extends GenericJpaDAOImpl<Rodamiento> implements RodamientoDAO{

	@Override
	public Integer obtenerStock(Rodamiento rodamiento) {
		Integer stock = 0;
		try{
			
			String queryString = "SELECT r.stock FROM Rodamiento r " +
									"WHERE r.codigo = :codigo " +
										"AND r.caracteristicas = :caracteristicas " +
										"AND r.marca = :marca " +
										"AND r.origen = :origen ";
			
			Query query = entityManager.createQuery(queryString);
			query.setParameter("codigo", rodamiento.getCodigo());
			query.setParameter("caracteristicas", rodamiento.getCaracteristicas());
			query.setParameter("marca", rodamiento.getMarca());
			query.setParameter("origen", rodamiento.getOrigen());
	
	//		String queryString = "SELECT r.stock FROM Rodamiento r " +
	//								"WHERE r.codigo = '"+rodamiento.getCodigo()+"'"+
	//									" AND r.caracteristicas = '"+rodamiento.getCaracteristicas()+"'"+
	//									" AND r.marca = '"+rodamiento.getMarca()+"'"+
	//									" AND r.origen = '"+rodamiento.getOrigen()+"'";
	//		
	//		Query query = entityManager.createQuery(queryString);
			
			stock = (Integer) query.getSingleResult();
		}catch(NoResultException e){
			System.out.println(e.getMessage() + "Obtener stock Rdamiento Por Rodamiento");
		}
		return stock;
	}

	@Override
	public Rodamiento find(Rodamiento rodamiento) {
		Rodamiento rodamientoObtenido = null;
		try{
			String queryString = "SELECT r FROM Rodamiento r " +
									"WHERE r.codigo = :codigo " +
										"AND r.caracteristicas = :caracteristicas " +
										"AND r.marca = :marca " +
										"AND r.origen = :origen ";
			Query query = entityManager.createQuery(queryString);
			query.setParameter("codigo", rodamiento.getCodigo());
			query.setParameter("caracteristicas", rodamiento.getCaracteristicas());
			query.setParameter("marca", rodamiento.getMarca());
			query.setParameter("origen", rodamiento.getOrigen());
			
			rodamientoObtenido = (Rodamiento) query.getSingleResult();
		}catch(NoResultException e){
			System.out.println(e.getMessage() + "obtener rodamiento por rodamiento");
		}
		return rodamientoObtenido;
	}
	
	@Override
	public RodamientoStock findRodamientoStock(Rodamiento rodamiento) {
		RodamientoStock rodamientoObtenido = null;
		try{
			String queryString = "SELECT r FROM RodamientoStock r " +
									"WHERE r.codigo = :codigo " +
										"AND r.caracteristicas = :caracteristicas " +
										"AND r.marca = :marca " +
										"AND r.origen = :origen ";
			Query query = entityManager.createQuery(queryString);
			query.setParameter("codigo", rodamiento.getCodigo());
			query.setParameter("caracteristicas", rodamiento.getCaracteristicas());
			query.setParameter("marca", rodamiento.getMarca());
			query.setParameter("origen", rodamiento.getOrigen());
			
			rodamientoObtenido = (RodamientoStock) query.getSingleResult();
		}catch(NoResultException e){
			System.out.println(e.getMessage() + "Obtener RdamientoStock Por Rodamiento");
		}
		return rodamientoObtenido;
	}

}
